home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1984-09-28 | 8.5 KB | 286 lines
100 ' Written for RBBS-PC VER 12.2 (03-23-84) 110 ' Kent Galbraith Sysop Kingcomm RBBS-PC Kingwood Texas 120 ' 713-360-1316 Data 130 ' 140 CLEAR 5000:DEFINT X,Y,Z:DIM X,Y,Z 150 ' 160 ON ERROR GOTO 2730: KEY OFF 170 ' 180 ' 190 ' 200 REM . . . . ---> Program Name is SECURE.BAS <----- 210 V1$= "SECURE"' Master File Name 220 V2$= "SECURE.ISI"' Key File Name 230 RL% = 30 ' Record Length 240 KL% = 13 ' Key Length 250 T = 3 ' Total Number of Fields 260 HOME$ = CHR$( 11) 270 SUBKEY%= INT(64/(KL%+6)) 280 BOTT$ = HOME$+STRING$(0, 28)+STRING$( 22, 31) 290 BLANK$= STRING$( 75,32) 300 CL$ = CHR$( 11)+CHR$( 12)+CHR$( 11) 310 RC = 28 320 DC = 31 330 RB$= CHR$(32)+CHR$(29) 340 SB$= CHR$(219)+CHR$(29) 350 BS$= CHR$( 28)+CHR$(29)+CHR$(29)+CHR$(32)+CHR$(29) 360 FF$ = CHR$( 140 ) 370 DIM F$(T),F#(T)' Dimension Fields 380 DEF FN CRT$(E1,E2)=HOME$+STRING$(E2,DC)+STRING$(E1,RC) 390 ' 400 D$=CHR$(94)+STRING$(KL%,32):' Dummy Key 410 DIM CX(3),CY(3),FL(3),TY$(3) 420 A%=INT(64/(KL%+6))' Number of Keys per Sector 430 ' 440 OPEN "R",1,V1$,RL%:' Open Master File 450 OPEN "R",2,V2$,64:' Open Key File 460 FIELD 1,RL% AS FR$:' Field Master File Buffer 470 FIELD 2,32 AS KS$:' Field Key File Buffer 480 PRINT CL$; 490 FL(1)=13:CX(1)=47:CY(1)=6:TY$(1)="A" 500 FL(2)=3:CX(2)=47:CY(2)=8:TY$(2)="N" 510 FL(3)=9:CX(3)=47:CY(3)=10:TY$(3)="A" 520 PRINT HOME$;' Print Screen 530 PRINT " WRITTEN FOR RBBS-PC VER.12.2" 540 PRINT "" 550 PRINT " by Kent Galbraith Sysop Kingcomm RBBS-PC" 560 PRINT "" 570 PRINT " Kingwood Texas,77051,713-360-1316" 580 PRINT "" 590 PRINT " ENTER FILENAME AND EXT :............." 600 PRINT "" 610 PRINT " ENTER SECURITY CODE NUMBER 1-99 :..." 620 PRINT "" 630 PRINT " ENTER OPTIONAL PASSWORD 8 CHARS MAX :........." 640 PRINT "" 650 PRINT "" 660 PRINT "" 670 PRINT "" 680 PRINT "" 690 PRINT "" 700 PRINT " THIS PROGRAM CAN ALSO BE USED FOR THE GROUP FILE" 710 PRINT "" 720 PRINT "" 730 PRINT "" 740 PRINT "" 750 ' 760 ' Begin Mainline of Program (03-24-84) 770 ' 780 UPDTE$="" 790 FOR X = 1 TO T:F$(X)="":F#(X)=0: NEXT X' Clear Fields 800 PRINT BOTT$;BLANK$;BOTT$;"<A>dd Record, <G>et Record, <S>earch or <E>nd Program "; 810 TY$="A":FL=1 820 GOSUB 2370 830 IF T$="A" OR T$="a" THEN 900 840 IF T$="G" OR T$="g" THEN UPDTE$="YES":GOTO 1880 850 IF T$="E" OR T$="e" THEN 2670 860 IF T$="S" OR T$="s" THEN 1690 870 PRINT CHR$(7); 880 GOTO 800 890 ' 900 ' Start of Input 910 ' 920 PRINT BOTT$;BLANK$;BOTT$;"Enter the < Key to back up a Field"; 930 ' 940 'Field No. 1 IS FILENAME / Length - 13 / Type - A 950 ' 960 PRINT FN CRT$( 47 , 6 );""; 970 FL = 13 980 TY$ = "A" 990 GOSUB 2370 1000 IF LEN(T$)=0 THEN 1030 1010 IF ASC(T$)=60 THEN 520 1020 F$( 1 ) = T$ : REM MOVE INKEY VARIABLE TO FIELD 1030 F$( 1 ) = F$( 1 ) + STRING$( 13 -LEN(F$( 1 )),32) 1040 PRINT FN CRT$( 47 , 6 );F$( 1 ); 1050 K$= F$( 1 ) 1060 ' 1070 ' 1080 'Field No. 2 IS SECURITY CODE / Length - 3 / Type - N 1090 ' 1100 PRINT FN CRT$( 47 , 8 );""; 1110 FL = 3 1120 TY$ = "N" 1130 GOSUB 2370 1140 IF LEN(T$)=0 THEN 1190 1150 IF ASC(T$)=60 THEN 940 1160 GOSUB 2540: REM .. NUMERIC CHECK SUB ROUTINE ... 1170 IF N=0 THEN PRINT CHR$(7);:GOTO 1080 1180 F$( 2 ) = T$ : REM MOVE INKEY VARIABLE TO FIELD 1190 F$( 2 ) = F$( 2 ) + STRING$( 3 -LEN(F$( 2 )),32) 1200 PRINT FN CRT$( 47 , 8 );F$( 2 ); 1210 F#( 2 ) = VAL(F$( 2 )) 1220 ' 1230 ' 1240 'Field No. 3 IS PASSWORD / Length - 9 / Type - A 1250 ' 1260 PRINT FN CRT$( 47 , 10 );""; 1270 FL = 9 1280 TY$ = "A" 1290 GOSUB 2370 1300 IF LEN(T$)=0 THEN 1330 1310 IF ASC(T$)=60 THEN 1080 1320 F$( 3 ) = T$ : REM MOVE INKEY VARIABLE TO FIELD 1330 F$( 3 ) = F$( 3 ) + STRING$( 9 -LEN(F$( 3 )),32) 1340 PRINT FN CRT$( 47 , 10 );F$( 3 ); 1350 ' Split Record into Fields 1360 R$="" 1370 R$ = R$ + F$( 1 ) + CHR$(44) 1380 R$ = R$ + F$( 2 ) + CHR$(44) 1390 R$ = R$ + F$( 3 ) + CHR$(44) 1400 ' UPdate Switch Set goto 12620 1410 IF UPDTE$="YES" THEN 1570 1420 REM 1430 ' 1440 ' Write Record to File (03-24-84) 1450 ' 1460 X=0:IF INT(LOF(1)/64)=0 THEN 1490 1470 X=X+1:GET 1,X:IF INSTR(KS$,D$)<>0 THEN 1520 1480 IF INT(LOF(1)/64)=X THEN 1490 ELSE 1470 1490 X=X+1:KR$="":FOR Y=1 TO A%:KR$=KR$+CHR$(94)+STRING$(KL%,32):G$=STR$(INT(LOF(1)/64)*A%+Y):KR$=KR$+STRING$(5-LEN(G$),32)+G$:NEXT Y 1500 LSET KS$=KR$: PUT 2,X 1510 LSET FR$=STRING$(RL%,0):FOR Y=1 TO A%: PUT 1, (INT(LOF(2)/64)-1)*A%+Y:NEXT Y' Clear Master File 1520 ' Write Key 1530 ' 1540 KR$=KS$ 1550 P=INSTR(KR$,D$) 1560 KREC%=X 1570 ' 1580 K$=CHR$(94)+K$ 1590 KR$=MID$(KR$,1,P-1)+K$+MID$(KR$,P+LEN(K$),LEN(KR$)) 1600 ' 1610 LR%=VAL(MID$(KR$,P+LEN(K$),5)) 1620 ' Write Master File 1630 LSET FR$=R$ 1640 PUT 1,LR% 1650 ' Write Key 1660 LSET KS$=KR$ 1670 PUT 2,KREC% 1680 GOTO 520 1690 ' String Search 1700 X=0 1710 UPDTE$="S"' Set Update Flag for Search 1720 PRINT BOTT$;BLANK$;BOTT$;"Search for ? - ";:REM .. SEARCH 1730 FL=30' Max Length for Search String 1740 TY$="A"'Search String is Alpha 1750 GOSUB 2370 1760 Q$=T$ 1770 PRINT BOTT$;BLANK$;BOTT$;"Press any key to stop search ";:FL=1:TY$="A" 1780 FOR X = 1 TO INT(LOF(1)/RL%):GET 1,X:IF INSTR(FR$,Q$)<>0 AND FR$<>STRING$(RL%,0) THEN 1810 1790 IF INKEY$ <> "" THEN 520 1800 NEXT X:GOTO 520 1810 GOSUB 2110' Print Record and Return 1820 PRINT BOTT$;BLANK$;BOTT$;"<N>ext, <S>top - "; 1830 TY$="A":FL=1:GOSUB 2370 1840 IF T$="N" OR T$ = "n" THEN 1800 1850 IF T$="S" OR T$="s" THEN 520 1860 GOTO 1820 1870 ' 1880 REM 1890 ' Get Record (03-24-84) 1900 REM 1910 FL = 13 1920 PRINT FN CRT$( 47 , 6 );STRING$(FL,46);FN CRT$( 47 , 6 );""; 1930 TY$ = "A" 1940 GOSUB 2370 1950 IF LEN(T$)=0 THEN 520:REM .RETURN TO MAINLINE IF NULL ENTRY 1960 K$=T$:REM . PASS INKEY TO KEY VAR. 1970 K$ = K$ + STRING$(FL-LEN(K$),32): REM . . LEFT JUST & PAD 1980 K$ = CHR$(94) + K$ 1990 REM . . . . . LOCATE RECORD . . . . . . . 2000 P = 0 2010 KREC% = 1 2020 FOR X = KREC% TO INT(LOF(1)/64): GET 2,X:IF INSTR(P+1,KS$,K$)=0 THEN P=0: NEXT X ELSE 2040 2030 PRINT BOTT$;BLANK$;BOTT$;CHR$(7)"-----------> NOT IN FILE <----------";:GOSUB 2890:GOTO 520 2040 REM . . . . GET RECORD FROM MASTER FILE . . . . 2050 KR$=KS$ 2060 KREC% = X 2070 P = INSTR(P+1,KR$,K$) 2080 LR% = VAL(MID$(KR$,P+LEN(K$),5)) 2090 GET 1,LR% 2100 REM 2110 REM . . . SUBDIVIDE & PRINT RECORD . . . 2120 F$( 1 ) = MID$(FR$, 1 , 13 ) 2130 F$( 2 ) = MID$(FR$, 14 , 3 ) 2140 F$( 3 ) = MID$(FR$, 17 , 9 ) 2150 F#( 2 ) = VAL(F$( 2 )) 2160 PRINT FN CRT$( 47 , 6 );F$( 1 );-CHR$(44) 2170 PRINT FN CRT$( 47 , 8 );F$( 2 );-CHR$(44) 2180 PRINT FN CRT$( 47 , 10 );F$( 3 );-CHR$(44) 2190 IF UPDTE$="S" THEN RETURN : REM If this is a search then return 2200 PRINT BOTT$;BLANK$;BOTT$;CHR$(7);"<C>hange, <N>ext, <D>elete - "; 2210 FL = 1 2220 TY$ = "A" 2230 GOSUB 2370 2240 IF T$="C" OR T$="c" THEN 900 2250 IF T$="N" OR T$= "n" THEN 2020 2260 IF T$="D" OR T$="d" THEN 2280 2270 GOTO 520 2280 REM ... Delete Record 2290 PRINT BOTT$;BLANK$;BOTT$;"Are You Sure you want to DELETE (Y/N) "; 2300 FL=1:GOSUB 2370: IF T$="N" OR T$="n" THEN PRINT BOTT$;BLANK$;BOTT$;CHR$(7);"--> Not Deleted <--";:GOSUB 2890:GOTO 520 2310 IF T$<>"Y" AND T$<>"y" THEN 2300 2320 PRINT BOTT$;BLANK$;BOTT$;"--> Deleted <--"; 2330 K$=MID$(D$,2,LEN(D$))' Null Key 2340 R$=STRING$(RL%,0)' Null Master File 2350 GOTO 1570' goto Write Record Routines 2360 ' 2370 ' Keyboard Scan (Inkey) Routine 2380 COLOR 11,0 2390 LOCATE ,,1 2400 T$="" 2410 PX = POS(0): PY = CSRLIN 2420 A$=INKEY$:IF A$="" THEN 2420 2430 PRINT RB$; 2440 IF ASC(A$)=8 AND LEN(T$)>0 THEN PRINT BS$;:T$=LEFT$(T$,LEN(T$)-1):GOTO 2420 2450 IF ASC(A$)=13 THEN 2530 2460 IF ASC(A$)<32 OR ASC(A$)>127 THEN 2420 2470 T$=T$+A$ 2480 ' 2490 IF LEN(T$)=1 THEN LOCATE PY,PX:PRINT STRING$(FL,".");:LOCATE PY,PX 2500 IF LEN(T$)>FL THEN T$=MID$(T$,1,LEN(T$)-1):PRINT CHR$(7);:GOTO 2420 2510 PRINT A$; 2520 GOTO 2420 2530 COLOR 7,0:LOCATE ,,0: RETURN 2540 ' Number Validation Routine 2550 F1=0:F2=0:N=0 2560 FOR X = 1 TO LEN(T$) 2570 A=ASC(MID$(T$,X,1)) 2580 IF A<45 OR A>57 THEN PRINT CHR$(7);:GOTO 2650 2590 IF A=47 THEN 2600 IF A=46 THEN F1=F1+1:IF F1>1 THEN PRINT CHR$(7);:GOTO 2650 2610 IF A=45 THEN F2=F2+1:IF F2>1 THEN PRINT CHR$(7);:GOTO 2650 2620 NEXT X 2630 IF INSTR(T$,"-")>1 THEN PRINT CHR$(7);:GOTO 2650 2640 N=1 2650 RETURN 2660 ' 2670 PRINT BOTT$;BLANK$;BOTT$;"Press Enter to End Program ";:INPUT D$ 2680 SYSTEM ' You may branch to another program from here this is a great 2690 REM ' error check routine.GKG. 2700 REM 2710 REM 2720 ' 2730 SOUND 450,5:SOUND 20000,1:SOUND 450,5' Error Traps 2740 IF ERR=27 OR ERR=25 THEN PRINT BOTT$;BLANK$;BOTT$;"-->Printer Not Ready<--";:GOSUB 2890:PRINT BOTT$;"<R>etry. <I>gnore, <A>bort ";:FL=1:GOSUB 2370:IF T$="A" OR T$="a" THEN RESUME 2670 ELSE IF T$="I" OR T$="i" THEN RESUME NEXT ELSE RESUME 2750 IF ERR=24 THEN PRINT BOTT$;BLANK$;BOTT$;"--> Printing <--";:RESUME 2760 E(2)=53:E$(2)="YOUR DATA FILE CANNOT BE FOUND" 2770 E(3)=54:E$(3)="BAD FILE MODE - Your DATA File does not match this Program " 2780 E(4)=57:E$(4)="DISK I/O ERROR - Cannot Recover; Try to RUN the Program again" 2790 E(5)=61:E$(5)="YOUR DISK IS FULL - Cannot Recover " 2800 E(6)=68:E$(6)="YOUR DISK IS WRITE PROTECTED " 2810 E(7)=2:E$(7)="YOU HAVE A SYNTAX ERROR IN LINE "+STR$(ERL) 2820 E(8)=11:E$(8)="You have a division by zero in Your computation at line "+STR$(ERL) 2830 FOR X = 1 TO 10:IF ERR=E(X) THEN 2850 ELSE NEXT X 2840 PRINT BOTT$;BLANK$;BOTT$;"You have error number "; ERR;" in Line Number ";ERL:GOTO 2860 2850 PRINT BOTT$;BLANK$;BOTT$;E$(X);CHR$(7) 2860 CLOSE:END 2870 RUN 2880 ' 2890 ' Time Delay Loop 2900 ' 2910 FOR Z = 1 TO 2200 2920 NEXT Z 2930 RETURN 2940 'GKG 03-25-84